package com.kuang.array;

import java.util.Arrays;

/**
 * 稀疏数组
 * @author wuJiaWei
 * @version 1.0
 * @date 2024/8/10
 * @time 15:14:42
 */
public class Demo08 {
    public static void main(String[] args) {
        //1.创建一个二维数组11*11 0:表示没有棋子，1表示黑子，2表示蓝子
        int[][] arr1 = new int[11][11];
        arr1[1][2] = 1;
        arr1[2][3] = 2;
        arr1[5][6] = 2;
        //输出原始数组
        System.out.println("原始数组");
        for (int[] ints : arr1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

        //2.将二维数组转成稀疏数组
        //思路：1.获取原始数组中有效值的个数 2.创建一个稀疏数组 3.将原始数组的有效值存入稀疏数组 4.输出稀疏数组 5.将稀疏数组还原成原始数组
        //1.获取原始数组中有效值的个数
        int sum = 0;
        for (int[] ints : arr1) {
            for (int anInt : ints)
                if (anInt != 0)
                    sum++;
        }
        System.out.println();
        //2.创建一个稀疏数组
        //稀疏数组的第一行存储原始数组的行数，列数，有效值的个数,从第二行开始存储有效值
        int[][] arr2 = new int[sum+1][3];
        //几行几列几个有效值
        arr2[0][0] = 11;
        arr2[0][1] = 11;
        arr2[0][2] = sum;
        System.out.println(Arrays.deepToString(arr2));
        //遍历二维数组，将有效值存入稀疏数组
        int count = 0;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++){
                if (arr1[i][j] != 0){
                    count++;
                    arr2[count][0] = i;
                    arr2[count][1] = j;
                    arr2[count][2] = arr1[i][j];
                }
            }
        }
        System.out.println("输出稀疏数组：");
        for (int[] ints : arr2) {
            System.out.print(ints[0]+"\t");
            System.out.print(ints[1]+"\t");
            System.out.print(ints[2]+"\t");
            System.out.println();
        }

    }



}
